package Fachada;

/**
 * Classe responsável por implementar uma fachada para a GUI.
 * 
 */

import ClassesBasicas.*;
import Negocio.*;
import erro.GeralException;
import erro.NegocioException;
import java.util.ArrayList;
import java.util.Collection;


public class Fachada {

	private NegocioComponente rncomp;
	private NegocioAtividade rnAtividade;
	private NegocioEstadio rnEstadio;
	private NegocioPais rnPais;
	private NegocioCopa rnCopa;
	private NegocioArbitro rnArbitro;
	private NegocioSelecao rnSelecao;

	public Fachada() {
		rncomp = new NegocioComponente();
		rnAtividade = new NegocioAtividade();
		rnEstadio = new NegocioEstadio();
		rnPais = new NegocioPais();
		rnCopa = new NegocioCopa();
		rnArbitro = new NegocioArbitro();
		rnSelecao = new NegocioSelecao();
	}
		
		
	/*Início das implementações de ESDRAS */
	
	/*Atividade*/
	
	/**
	 * Salva uma atividade
	 * 
	 * @author Esdras
	 * @param  Atividade
	 * @throws NegocioException
	 * @throws GeralException
	 */
	public void salvarAtividade(Atividade at) throws NegocioException,GeralException {

		if(!rnAtividade.existeAtividade(at))
			
			rnAtividade.salvar(at);
		
		else
			
			throw new GeralException("Atividade j� existe");
	}
	
	/**
	 * Consulta uma atividade
	 * 
	 * @author Esdras
	 * @param at
	 * @return Atividade
	 * @throws NegocioException
	 * @throws GeralException
	 */
	public Atividade consultarAtividade(Atividade at) throws NegocioException,GeralException{
		
	    if(rnAtividade.existeAtividade(at))
	    	
	    	return rnAtividade.consultar(at.getnome_Atividade());
	    
	    else
	    	
	    	throw new GeralException("Consulta : Atividade n�o existe");
	}
	
	/**
	 * Exclui uma atividade
	 * 
	 * @param at
	 * @throws NegocioException
	 * @throws GeralException
	 */
	public void excluirAtividade(Atividade at) throws NegocioException,GeralException{
		
		if(rnAtividade.existeAtividade(at))
			
			rnAtividade.excluir(at.getnome_Atividade());
		
		else
			
			throw new GeralException("Atividade n�o existe");
	}

	/**
	 * Lista todas as Atividades
	 * @author Esdras
	 * @return ArrayList<Atividade>
	 * @throws NegocioException
	 */
	public ArrayList<Atividade> listarAtividade() throws NegocioException{
		return rnAtividade.listarAtividade();
	}
	/*Atividade*/
	
	/*COMPONENTE*/
	/**
	 * Salva um componente
	 * 
	 * @author Esdras
	 * @param Componente
	 * @throws NegocioException
	 * @throws GeralException
	 */
	public void salvarComponente(Componente comp)throws NegocioException,GeralException{
		
		if(!rncomp.existComp(comp))
			rncomp.salvar(comp);
		else
			throw new GeralException("Componente j� exixte");
	}
	/**
	 * Exclui um componente
	 * 
	 * @param Componente
	 * @throws NegocioException
	 * @throws GeralException
	 */
	public void excluirComponnte(Componente comp)throws NegocioException, GeralException{
		if(rncomp.existComp(comp))
			rncomp.excluir(comp.getNomeComponente());
		else
			throw new GeralException("Componente n�o existe");
		
	}
	/**
	 * Consulta um componente
	 * 
	 * @author Esdras
	 * @param comp
	 * @return
	 * @throws GeralException
	 * @throws NegocioException
	 */
	public Componente consultaComponente(Componente comp)throws GeralException,NegocioException{
		if(rncomp.existComp(comp))
			return rncomp.consultar(comp.getNomeComponente());
		else
			throw new GeralException("Consulta : Componente n�o existe");
		
	}
	/**
	 * Lista todos os componentes de uma deterninada sele��o;
	 * 
	 * @author Esdras
	 * @param nome
	 * @return
	 * @throws NegocioException
	 */
	public Collection<Componente> listarComponentePorCel(String nome) throws NegocioException{
		return rncomp.listarPorSel(nome);
	}
	/*Componente*/
	
	/*Selec�o*/
	/**
	 * Salva uma Sele��o;
	 * 
	 * @author Esdras
	 * @param  Selecao
	 * @throws NegocioException
	 * @throws GeralException
	 */
	public void salvarSelecao(Selecao sel) throws NegocioException,GeralException{
		if(!rnSelecao.existeSelecao(sel)){
			rnSelecao.salvar(sel);
		}else{
			throw new GeralException("Sele��o j� existe");
		}
	}
	/**
	 * Exclui uma sele��o;
	 * 
	 * @author Esdras
	 * @param sel
	 * @throws NegocioException
	 * @throws GeralException
	 */
	public void exvluirSelecao(Selecao sel) throws NegocioException,GeralException{
		if(rnSelecao.existeSelecao(sel)){
			rnSelecao.excluir(sel.getNomeSelecao());
		}else{
			throw new GeralException("Sele��o n�o existe");
		}
	}
	/**
	 * Consulta uma sele��o 
	 * 
	 * @author Esdras
	 * @param sel
	 * @return Selecao
	 * @throws NegocioException
	 * @throws GeralException
	 */
	public Selecao consultarSelecao(Selecao sel) throws NegocioException, GeralException{
		if(rnSelecao.existeSelecao(sel)){
			return rnSelecao.consultar(sel.getNomeSelecao());
		}else{
			throw new GeralException("Sele��o n�o existe");
		}
	}
	/**
	 * @author Esdras
	 * @return ArrayList<Selecao>
	 * @throws NegocioException
	 */
	public ArrayList<Selecao> listarSelecoes() throws NegocioException{
		return rnSelecao.listarSelecao();
	}
	
	/*Sele��o*/
	
	/*T�rmino das implementa��es de ESDRAS*/
	
	
	/*Início das implementações de LEYLA */
	/*ESTADIO*/
	
	/**
	 * Salva um Estádio
	 * 
	 * @author Leyla
	 * @param  es
	 * @throws NegocioException
	 * @throws GeralException
	 * 
	 */
	
	public void salvarEstadio(Estadio es) throws NegocioException,GeralException {

		if(!rnEstadio.existeEstadio(es))
			rnEstadio.salvar(es);
		else
			throw new GeralException("Estádio já cadastrado!");
	}
	

	/**
	 * Consulta um Estádio
	 * 
	 * @author Leyla
	 * @param es
	 * @return Estadio
	 * @throws NegocioException
	 * @throws GeralException
	 * 
	 */
	
	public Estadio consultarEstadio(Estadio es) throws NegocioException,GeralException{
		
	    if(rnEstadio.existeEstadio(es))
	    	return rnEstadio.consultar(es.getNomeEstadio());
	    else
	    	throw new GeralException("Estádio não cadastrado!");
	}
	
	/**
	 * Exclui um Estádio
	 * 
	 * @author leyla
	 * @param es
	 * @throws NegocioException
	 * @throws GeralException
	 * 
	 */
	
	public void excluirEstadio(Estadio es) throws NegocioException,GeralException{
		
		if(rnEstadio.existeEstadio(es))
			//rnEstadio.excluir(es.getNomeEstadio());
                        rnEstadio.excluirEstadio(es.getCodEstadio());
		else
			throw new GeralException("Estádio não cadastrado!");
	}

	/**
	 * Lista todos os Estádios
	 * 
	 * @author leyla
	 * @return ArrayList<Estadio>
	 * @throws NegocioException
	 * 
	 */
	
	public ArrayList<Estadio> listarEstadio() throws NegocioException{
		return rnEstadio.listarEstadio();
	}
		
	/*Término das implementações de LEYLA*/
	
	
	
	/*In�cio das implementa��es do componente KL�DSON*/
	/*PAIS*/
	
	/**
	 * Salva um Pais
	 * 
	 * @author Kledson
	 * @param  Pais
	 * @throws NegocioException
	 * @throws GeralException
	 * 
	 */
	 
	public void salvarPais(Pais p) throws NegocioException,GeralException {

		if(!rnPais.existePais(p))
			
			rnPais.salvar(p);
		else
			throw new GeralException("Pais j� cadastrado!");
	}
	
	
	/**
	 * Consulta um Pais
	 * 
	 * @author Kledson
	 * @param p
	 * @return Pais
	 * @throws NegocioException
	 * @throws GeralException
	 * 
	 */
	 
	public Pais consultarPais(String nome) throws NegocioException,GeralException{
    	return rnPais.consultar(nome);
	}
	
	public Pais consultarPais(int id) throws NegocioException,GeralException{
		return rnPais.consultar(id);
	}
	
	/**
	 * Exclui um Pais
	 * 
	 * @param p
	 * @throws NegocioException
	 * @throws GeralException
	 * 
	 */
	
	public void excluirPais(String pais) throws NegocioException,GeralException{
		
		if(rnPais.consultar(pais) == null)
			throw new GeralException("Pais nao existe");
			rnPais.excluir(pais);
	}
	
	public void excluirPais(int id) throws NegocioException,GeralException{
	
		if(rnPais.consultar(id) == null)
			throw new GeralException("Pais nao existe");
		
		rnPais.excluir(id);
	}
	
	/**
	 * Lista todos os Paises.
	 * 
	 * @author Kledson
	 * @return ArrayList<Pais>
	 * @throws NegocioException
	 * 
	 */
	
	public ArrayList<Pais> listarPais() throws NegocioException{
		return rnPais.listarPais();
	}

/*
/*In�cio das implementa��es de Natalie */
/*Copa*/


/**
 * Salva uma Copa
 * 
 * @author Natalie
 * @param  Cp
 * @throws NegocioException
 * @throws GeralException
 */
public void salvarCopa(Copa cp) throws NegocioException,GeralException {

	if(!rnCopa.existeCopa(cp))
		rnCopa.salvar(cp);
	
	else
		
		throw new GeralException("Copa ja existe");
}

/**
 * Consulta uma Copa pelo Nome
 */

public Copa consultarCopa(Copa cp) throws NegocioException,GeralException{
	
    if(rnCopa.existeCopa(cp))
    return rnCopa.consultar(cp.getNomeCopa());
    
    else
    	
    	throw new GeralException("Consulta: Copa nao existe");
}

/**
 * Exclui uma Copa pelo Nome
 */

public void excluirCopa(Copa cp) throws NegocioException,GeralException{
	
	if(rnCopa.existeCopa(cp))
		
		rnCopa.excluir(cp.getNomeCopa());
	
	else
		
		throw new GeralException("Copa n�o existe");
}

/**
 * Lista todas as Copas
 */

public ArrayList<Copa> listarCopa() throws NegocioException{
	return rnCopa.listarCopa();
}

/*In�cio das implementa��es da componente Prii */
/*ARBITRO*/

/**
 * Salva um Arbitro
 * 
 * @author Prii
 * @param  arb
 * @throws NegocioException
 * @throws GeralException
 * 
 */

public void salvarArbitro(Arbitro arb) throws NegocioException,GeralException {

	if(!rnArbitro.existeArbitro(arb))
		rnArbitro.salvar(arb);
	else
		throw new GeralException("Arbitro j� cadastrado!");
}


/**
 * Consulta um Arbitro
 * 
 * @author Prii
 * @param arb
 * @return Arbitro
 * @throws NegocioException
 * @throws GeralException
 * 
 */

public Arbitro consultarArbitro(Arbitro arb) throws NegocioException,GeralException{
	
    if(rnArbitro.existeArbitro(arb))
    	return rnArbitro.consultar(arb.getNomeArbitro());
    else
    	throw new GeralException("Arbitro n�o cadastrado!");
}

/**
 * Exclui um Arbitro 
 * 
 * @author Prii
 * @param arb
 * @throws NegocioException
 * @throws GeralException
 * 
 */

public void excluirArbitro(Arbitro arb) throws NegocioException,GeralException{
	
	if(rnArbitro.existeArbitro(arb))
		rnArbitro.excluir(arb.getNomeArbitro());
	else
		throw new GeralException("Arbitro n�o cadastrado !");
}

/**
 * Lista todos os �rbitros
 * 
 * @author Prii
 * @return ArrayList<Arbitro>
 * @throws NegocioException
 * 
 */

public ArrayList<Arbitro> listarArbitro() throws NegocioException{
	return rnArbitro.listarArbitro();
}
	
/*T�rrmino das implementa��es da componente PRII*/

}